﻿using System; 
using System.Text;
using System.Collections.Generic; 
using System.Data;
using System.Data.SqlClient;
using ART.Data;
using ART.Common;
using ART.Model;
using ART.Cache;

namespace ART.BLL {
  //系统设置-权限
 	public partial class B_permissions
	{
   		
		public B_permissions()
		{}
        #region __________基础方法__________
		/// <summary>
		/// 删除指定缓存
		/// </summary>
		public void ClearCache(string key)
		{
		    string CacheKey = "BLL/permissions";
			if(!string.IsNullOrEmpty(key)){
			    CacheKey+="/"+key;
			}
			LRSCache.GetCacheService().RemoveObject(CacheKey);
		}
        /// <summary>
        /// 增加一条数据
        /// </summary>
        public void Add(ART.Model.M_permissions model)
        {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("insert into permissions(");
            strSql.Append("Id,PermissName,PageName,Remarks,ParentId,Sort,isShow,ColPath");
            strSql.Append(") values (");
            strSql.Append("@Id,@PermissName,@PageName,@Remarks,@ParentId,@Sort,@isShow,@ColPath");
            strSql.Append(") ");

            #region __________参数__________
            SqlParameter[] parameters = {
			            new SqlParameter("@Id", SqlDbType.Int,4) ,            
                        new SqlParameter("@PermissName", SqlDbType.VarChar,50) ,            
                        new SqlParameter("@PageName", SqlDbType.NVarChar,1000) ,            
                        new SqlParameter("@Remarks", SqlDbType.VarChar,50) ,            
                        new SqlParameter("@ParentId", SqlDbType.Int,4) ,            
                        new SqlParameter("@Sort", SqlDbType.Int,4) ,            
                        new SqlParameter("@isShow", SqlDbType.Int,4) ,            
                        new SqlParameter("@ColPath", SqlDbType.NVarChar,1000)             
              
            };


            parameters[0].Value = model.Id;
            parameters[1].Value = model.PermissName;
            parameters[2].Value = model.PageName;
            parameters[3].Value = model.Remarks;
            parameters[4].Value = model.ParentId;
            parameters[5].Value = model.Sort;
            parameters[6].Value = model.isShow;
            parameters[7].Value = getColPath(model.ParentId) + model.Id + ","; 
            #endregion
            SqlHelper.ExecNonQuery(strSql.ToString(), parameters);

        }

        /// <summary>
        /// 更新一条数据
        /// </summary>
        public bool Update(ART.Model.M_permissions model)
        {
            StringBuilder strSql = new StringBuilder();
            #region __________语句__________
            strSql.Append("update permissions set ");

            strSql.Append(" Id = @Id , ");
            strSql.Append(" PermissName = @PermissName , ");
            strSql.Append(" PageName = @PageName , ");
            strSql.Append(" Remarks = @Remarks , ");
            strSql.Append(" ParentId = @ParentId , ");
            strSql.Append(" Sort = @Sort , ");
            strSql.Append(" isShow = @isShow , ");
            strSql.Append(" ColPath = @ColPath  ");
            strSql.Append(" where Id=@Id  ");

            #endregion

            #region __________参数__________
            SqlParameter[] parameters = {
			            new SqlParameter("@Id", SqlDbType.Int,4) ,            
                        new SqlParameter("@PermissName", SqlDbType.VarChar,50) ,            
                        new SqlParameter("@PageName", SqlDbType.NVarChar,1000) ,            
                        new SqlParameter("@Remarks", SqlDbType.VarChar,50) ,            
                        new SqlParameter("@ParentId", SqlDbType.Int,4) ,            
                        new SqlParameter("@Sort", SqlDbType.Int,4) ,            
                        new SqlParameter("@isShow", SqlDbType.Int,4) ,            
                        new SqlParameter("@ColPath", SqlDbType.NVarChar,1000)             
              
            };

            parameters[0].Value = model.Id;
            parameters[1].Value = model.PermissName;
            parameters[2].Value = model.PageName;
            parameters[3].Value = model.Remarks;
            parameters[4].Value = model.ParentId;
            parameters[5].Value = model.Sort;
            parameters[6].Value = model.isShow;
            parameters[7].Value = getColPath(model.ParentId) + model.Id + ","; 
            #endregion

            int rows = SqlHelper.ExecNonQuery(strSql.ToString(), parameters);
            if (rows > 0)
            {
                //string cachekey="info_"+Id;
                //ClearCache(cachekey);
                return true;
            }
            else
            {
                return false;
            }
        }

        /// <summary>
        /// 删除一条数据
        /// </summary>
        public bool Delete(int Id)
        {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("delete from permissions ");
            strSql.Append(" where Id=@Id ");
            SqlParameter[] parameters = {
					new SqlParameter("@Id", SqlDbType.Int,4)			};
            parameters[0].Value = Id;

            int rows = SqlHelper.ExecNonQuery(strSql.ToString(), parameters);

            //string cachekey="info_"+Id;
            //ClearCache(cachekey);

            if (rows > 0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        /// <summary>
        /// 得到一个对象实体
        /// </summary>
        public ART.Model.M_permissions GetModel(int Id)
        {
            string CacheKey = "BLL/permissions/info_" + Id;
            object objModel = LRSCache.GetCacheService().RetrieveObject(CacheKey);
            if (objModel == null)
            {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("select * from permissions ");
            strSql.Append(" where Id=@Id ");

            SqlParameter[] parameters = {
					new SqlParameter("@Id", SqlDbType.Int,4)			};
            parameters[0].Value = Id;


            ART.Model.M_permissions model = new ART.Model.M_permissions();
            DataSet ds = SqlHelper.ExecDataSet(strSql.ToString(), parameters);

            if (ds.Tables[0].Rows.Count > 0)
            {
                #region __________实体赋值__________
                if (ds.Tables[0].Rows[0]["Id"].ToString() != "")
                {
                    model.Id = int.Parse(ds.Tables[0].Rows[0]["Id"].ToString());
                }
                model.PermissName = ds.Tables[0].Rows[0]["PermissName"].ToString();
                model.PageName = ds.Tables[0].Rows[0]["PageName"].ToString();
                model.Remarks = ds.Tables[0].Rows[0]["Remarks"].ToString();
                if (ds.Tables[0].Rows[0]["ParentId"].ToString() != "")
                {
                    model.ParentId = int.Parse(ds.Tables[0].Rows[0]["ParentId"].ToString());
                }
                if (ds.Tables[0].Rows[0]["Sort"].ToString() != "")
                {
                    model.Sort = int.Parse(ds.Tables[0].Rows[0]["Sort"].ToString());
                }
                if (ds.Tables[0].Rows[0]["isShow"].ToString() != "")
                {
                    model.isShow = int.Parse(ds.Tables[0].Rows[0]["isShow"].ToString());
                }
                model.ColPath = ds.Tables[0].Rows[0]["ColPath"].ToString();


                #endregion

                LRSCache.GetCacheService().AddObject(CacheKey, model, 2 * 60 * 60);		
                return model;
            }
            else
            {
                return null;
            }

            }
            return (ART.Model.M_permissions)objModel;
        }

 	    /// <summary>
		/// 获得数据列表
		/// </summary>
		public DataSet GetList(string strWhere)
		{
			return GetList(0,strWhere,"");
		}
		/// <summary>
		/// 获得前几行数据
		/// </summary>
		public DataSet GetList(int Top,string strWhere,string filedOrder)
		{
			return GetList(0,"*",strWhere,filedOrder);
		}
		/// <summary>
		/// 获得前几行数据
		/// </summary>
		public DataSet GetList(int Top,string FieldName,string strWhere,string filedOrder)
		{
			StringBuilder strSql=new StringBuilder();
			strSql.Append("select ");
			if(Top>0)
			{
				strSql.Append(" top "+Top.ToString());
			}
			strSql.Append(" "+FieldName+" FROM permissions ");
			if(strWhere.Trim()!="")
			{
				strSql.Append(" where "+strWhere);
			}
			if(filedOrder.Trim()!="")
			{
				strSql.Append(" order by " + filedOrder);
			}
			return SqlHelper.ExecDataSet(strSql.ToString());
		}
#endregion

      #region __________自定义方法__________
        public int GetMaxId()
        {
            string cmdText = "select max(id) from permissions ";
            object obj = SqlHelper.ExecScalar(cmdText, new SqlParameter[0]);
            if (obj == DBNull.Value || obj == null)
            {
                return 1;
            }
            else
            {

                return Convert.ToInt32(obj) + 1;

            }
        }

        public bool IsChildDepartment(int Id)
        {
            string cmdText = string.Format("select top 1 Id from permissions where ParentId={0}", Id);
            return (SqlHelper.ExecScalar(cmdText, new SqlParameter[0]) != null);
        }
        public string GetSelfAndChildIds(int departmentId)
        {
            return GetIDbyParent(departmentId, true);
        }
        private void UpColPath(int Id, string Value)
        {
            string cmdText = "update permissions set ColPath='" + Value + "' where Id=" + Id;
            SqlHelper.ExecNonQuery(cmdText, new SqlParameter[0]);
        }
        private string getColPath(int pareid)
        {
            string tmp = "";
            M_permissions di = GetModel(pareid);
            if (di != null && di.ParentId != 0)
            {
                tmp = "," + getColPath(di.ParentId) + "," + pareid + ",";
            }
            else
            {
                tmp = "," + pareid + ",";
            }
            tmp = tmp.Replace(",,", ",");
            if (!tmp.StartsWith(",0,"))
            {
                tmp = ",0," + tmp;
            }
            return tmp.Replace(",,", ",");
        }

        /// <summary>
        /// 获取指定父级下所有
        /// </summary>
        /// <param name="pid"></param>
        /// <returns></returns>
        public DataTable GetListByParent(int pid)
        {
            string CacheKey = "bll/permissions/datatable/_" + pid;
            object objdt = LRSCache.GetCacheService().RetrieveObject(CacheKey);
            if (objdt == null)
            {
                DataTable dt = GetList(" CHARINDEX('," + pid + ",',colpath)>0 ").Tables[0];
                if (dt != null)
                {
                    LRSCache.GetCacheService().AddObject(CacheKey, dt, 5 * 60 * 60);
                    return dt;
                }
                return null;
            }
            else
            {
                return (DataTable)objdt;
            }
        }
        /// <summary>
        /// 获取指定父级下所有ID
        /// </summary>
        /// <param name="pid"></param>
        /// <returns></returns>
        public string GetIDbyParent(int pid, bool includePid)
        {
            string tmp = "0";
            DataTable dt = GetListByParent(pid);
            if (dt != null && dt.Rows.Count > 0)
            {
                foreach (DataRow dr in dt.Rows)
                {
                    if (dr["id"].ToString() == pid.ToString() && !includePid)
                    {
                        continue;
                    }
                    tmp += "," + dr["id"].ToString();
                }
            }
            tmp = tmp.Replace(",,", ",").Trim(',');
            return tmp;
        }
      #endregion 
	}
}

